/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.fontbox.cff;

/**
 * This is specialized CFFEncoding. It's used if the EncodingId of a font is set to 1.
 * 
 * @author Villu Ruusmann
 */
public final class CFFExpertEncoding extends CFFEncoding
{
    
    private static final int CHAR_CODE = 0;
    private static final int CHAR_SID = 1;
    
    /**
     * Table of character codes and their corresponding sid.
     */
    private static final int[][] CFF_EXPERT_ENCODING_TABLE = {
            {0, 0},
            {1, 0},
            {2, 0},
            {3, 0},
            {4, 0},
            {5, 0},
            {6, 0},
            {7, 0},
            {8, 0},
            {9, 0},
            {10, 0},
            {11, 0},
            {12, 0},
            {13, 0},
            {14, 0},
            {15, 0},
            {16, 0},
            {17, 0},
            {18, 0},
            {19, 0},
            {20, 0},
            {21, 0},
            {22, 0},
            {23, 0},
            {24, 0},
            {25, 0},
            {26, 0},
            {27, 0},
            {28, 0},
            {29, 0},
            {30, 0},
            {31, 0},
            {32, 1},
            {33, 229},
            {34, 230},
            {35, 0},
            {36, 231},
            {37, 232},
            {38, 233},
            {39, 234},
            {40, 235},
            {41, 236},
            {42, 237},
            {43, 238},
            {44, 13},
            {45, 14},
            {46, 15},
            {47, 99},
            {48, 239},
            {49, 240},
            {50, 241},
            {51, 242},
            {52, 243},
            {53, 244},
            {54, 245},
            {55, 246},
            {56, 247},
            {57, 248},
            {58, 27},
            {59, 28},
            {60, 249},
            {61, 250},
            {62, 251},
            {63, 252},
            {64, 0},
            {65, 253},
            {66, 254},
            {67, 255},
            {68, 256},
            {69, 257},
            {70, 0},
            {71, 0},
            {72, 0},
            {73, 258},
            {74, 0},
            {75, 0},
            {76, 259},
            {77, 260},
            {78, 261},
            {79, 262},
            {80, 0},
            {81, 0},
            {82, 263},
            {83, 264},
            {84, 265},
            {85, 0},
            {86, 266},
            {87, 109},
            {88, 110},
            {89, 267},
            {90, 268},
            {91, 269},
            {92, 0},
            {93, 270},
            {94, 271},
            {95, 272},
            {96, 273},
            {97, 274},
            {98, 275},
            {99, 276},
            {100, 277},
            {101, 278},
            {102, 279},
            {103, 280},
            {104, 281},
            {105, 282},
            {106, 283},
            {107, 284},
            {108, 285},
            {109, 286},
            {110, 287},
            {111, 288},
            {112, 289},
            {113, 290},
            {114, 291},
            {115, 292},
            {116, 293},
            {117, 294},
            {118, 295},
            {119, 296},
            {120, 297},
            {121, 298},
            {122, 299},
            {123, 300},
            {124, 301},
            {125, 302},
            {126, 303},
            {127, 0},
            {128, 0},
            {129, 0},
            {130, 0},
            {131, 0},
            {132, 0},
            {133, 0},
            {134, 0},
            {135, 0},
            {136, 0},
            {137, 0},
            {138, 0},
            {139, 0},
            {140, 0},
            {141, 0},
            {142, 0},
            {143, 0},
            {144, 0},
            {145, 0},
            {146, 0},
            {147, 0},
            {148, 0},
            {149, 0},
            {150, 0},
            {151, 0},
            {152, 0},
            {153, 0},
            {154, 0},
            {155, 0},
            {156, 0},
            {157, 0},
            {158, 0},
            {159, 0},
            {160, 0},
            {161, 304},
            {162, 305},
            {163, 306},
            {164, 0},
            {165, 0},
            {166, 307},
            {167, 308},
            {168, 309},
            {169, 310},
            {170, 311},
            {171, 0},
            {172, 312},
            {173, 0},
            {174, 0},
            {175, 313},
            {176, 0},
            {177, 0},
            {178, 314},
            {179, 315},
            {180, 0},
            {181, 0},
            {182, 316},
            {183, 317},
            {184, 318},
            {185, 0},
            {186, 0},
            {187, 0},
            {188, 158},
            {189, 155},
            {190, 163},
            {191, 319},
            {192, 320},
            {193, 321},
            {194, 322},
            {195, 323},
            {196, 324},
            {197, 325},
            {198, 0},
            {199, 0},
            {200, 326},
            {201, 150},
            {202, 164},
            {203, 169},
            {204, 327},
            {205, 328},
            {206, 329},
            {207, 330},
            {208, 331},
            {209, 332},
            {210, 333},
            {211, 334},
            {212, 335},
            {213, 336},
            {214, 337},
            {215, 338},
            {216, 339},
            {217, 340},
            {218, 341},
            {219, 342},
            {220, 343},
            {221, 344},
            {222, 345},
            {223, 346},
            {224, 347},
            {225, 348},
            {226, 349},
            {227, 350},
            {228, 351},
            {229, 352},
            {230, 353},
            {231, 354},
            {232, 355},
            {233, 356},
            {234, 357},
            {235, 358},
            {236, 359},
            {237, 360},
            {238, 361},
            {239, 362},
            {240, 363},
            {241, 364},
            {242, 365},
            {243, 366},
            {244, 367},
            {245, 368},
            {246, 369},
            {247, 370},
            {248, 371},
            {249, 372},
            {250, 373},
            {251, 374},
            {252, 375},
            {253, 376},
            {254, 377},
            {255, 378}           
    };

    private CFFExpertEncoding()
    {
    }

    /**
     * Returns an instance of the CFFExportEncoding class.
     * @return an instance of CFFExportEncoding
     */
    public static CFFExpertEncoding getInstance()
    {
        return CFFExpertEncoding.INSTANCE;
    }

    private static final CFFExpertEncoding INSTANCE = new CFFExpertEncoding();

    static
    {
        for (int[] encodingEntry : CFF_EXPERT_ENCODING_TABLE)
        {
            INSTANCE.add(encodingEntry[CHAR_CODE], encodingEntry[CHAR_SID]);
        }
    }
}